/**
 * 数据类型工具类
 */
var DataTypeUtil = {
    /**
     * 判断是否是对象
     * @param obj
     */
    isObject: function (obj){
        return typeof obj == 'object';
    },
    /**
     * 返回当前对象的类型
     * @param obj
     * @returns {string}
     */
    parsingType: function (obj){
        return Object.prototype.toString.call(obj).replace('[object ','').replace(']','');
    },
    /**
     * 判断对象是否是这个类型的
     * @param obj
     * @param type
     * @returns {boolean}
     */
    isType: function (obj,type){
        return Object.prototype.toString.call(obj) == '[object ' + type + ']';
    },
    /**
     * 判断是不是字符串
     * @param obj
     * @returns {boolean}
     */
    isString: function (obj){
        return Object.prototype.toString.call(obj) == '[object String]';
    },
    /**
     * 判断是不是Number
     * @param obj
     * @returns {boolean}
     */
    isNumber: function (obj){
        return Object.prototype.toString.call(obj) == '[object Number]';
    },
    /**
     * 判断是不是NaN (对数值进行计算时没有结果返回NaN)
     * @param obj
     * @returns {boolean}
     */
    isNaN: function (obj){
        return isNaN(obj);
    },
    /**
     * 判断是不是Boolean
     * @param obj
     * @returns {boolean}
     */
    isBoolean: function (obj){
        return Object.prototype.toString.call(obj) == '[object Boolean]';
    },
    /**
     * 判断是不是Symbol
     * @param obj
     * @returns {boolean}
     */
    isSymbol: function (obj){
        return Object.prototype.toString.call(obj) == '[object Symbol]';
    },
    /**
     * 判断是不是Undefined
     * @param obj
     * @returns {boolean}
     */
    isUndefined: function (obj){
        return Object.prototype.toString.call(obj) == '[object Undefined]';
    },
    /**
     * 判断是不是Null
     * @param obj
     * @returns {boolean}
     */
    isNull: function (obj){
        return Object.prototype.toString.call(obj) == '[object Null]';
    },
    /**
     * 判断是不是方法
     * @param obj
     * @returns {boolean}
     */
    isFunction: function (obj){
        return Object.prototype.toString.call(obj) == '[object Function]';
    },
    /**
     * 判断是不是时间对象
     * @param obj
     * @returns {boolean}
     */
    isDate: function (obj){
        return Object.prototype.toString.call(obj) == '[object Date]';
    },
    /**
     * 判断是不是数组
     * @param obj
     * @returns {boolean}
     */
    isArray: function (obj){
        return Object.prototype.toString.call(obj) == '[object Array]';
    },
    /**
     * 判断是不是正则表达式
     * @param obj
     * @returns {boolean}
     */
    isRegExp: function (obj){
        return Object.prototype.toString.call(obj) == '[object RegExp]';
    },
    /**
     * 判断是不是Error
     * @param obj
     * @returns {boolean}
     */
    isError: function (obj){
        return Object.prototype.toString.call(obj) == '[object Error]';
    },
    /**
     * 判断是不是document对象
     * @param obj
     * @returns {boolean}
     */
    isDocument: function (obj){
        return Object.prototype.toString.call(obj) == '[object HTMLDocument]';
    },
    /**
     * 判断是不是window对象（window 是全局对象 global 的引用）
     * @param obj
     * @returns {boolean}
     */
    isWindow: function (obj){
        return Object.prototype.toString.call(obj) == '[object global]';
    },
    /**
     * 其他类型转字符串（null undefined 返回''）
     * @param obj
     * @returns {string}
     */
    toStr: function (obj){
        if(this.isNull(obj) || this.isUndefined(obj)) return '';
        return String(obj);
    },
    /**
     * 其他类型转数字
     * - 字符串 --> 数字
     *  1.如果是纯数字的字符串，则直接将其转换为数字
     *  2.如果字符串中有非数字的内容，则转换为NaN
     *  3.如果字符串是一个空串或者是一个全是空格的字符串，则转换为0
     * - 布尔 --> 数字
     *  true 转成 1
     *  false 转成 0
     * - null --> 数字     0
     * - undefined --> 数字 NaN
     * @param obj
     * @returns {number}
     */
    toNumber: function (obj){
        return Number(obj);
    },
    /**
     * 其他类型转Boolean
     * - 数字 ---> 布尔     除了0和NaN，其余的都是true
     * - 字符串 ---> 布尔   除了空串，其余的都是true
     * - null和undefined都会转换为false
     * - 对象也会转换为true
     * @param obj
     * @returns {boolean}
     */
    toBoolean: function (obj){
        return Boolean(obj);
    },
    /**
     * 获取对象所有的键
     * @param obj
     * @returns {string[]}
     */
    getObjectKeys: function (obj){
      return Object.keys(obj);
    },

}